#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
class find_test
{
public:
    find_test(int num) : test_(num) {}
    ~find_test() {}
    find_test(const find_test &other)
    {
        test_ = other.test_;
    }
    find_test &operator=(const find_test &other)
    {
        test_ = other.test_;
        return *this;
    }
    int get() const { return test_; }

private:
    int test_;
};

int main()
{
    std::vector<find_test> vec;
    find_test f1(1);
    find_test f2(2);
    vec.push_back(f1);
    vec.push_back(f2);

    // find_if的前两个参数和find一样，区别在第三个参数上面，find_if接收一个函数对象，因此可以使用lambda表达式来解决
    if (vec.end() != find_if(vec.begin(), vec.end(), [f2](const find_test &other)
        { return f2.get() == other.get(); }))
    {
        std::cout << "find f2, f2 value is " << f2.get() << std::endl;
    }
}
